cmake_minimum_required (VERSION 2.8)
project(ZELESTE_ENGINE)



#------------------------------------------------------------------------------
# Buscando doxygen. Si esta presente, entonces definimos la opcion de 
# generar la documentacion.
#------------------------------------------------------------------------------
find_package(Doxygen)
IF (DOXYGEN_FOUND)
	option(ZEL_GENERATE_DOCUMENTATION "Build documentation with doxygen" ON)
ENDIF()

#------------------------------------------------------------------------------
# Ejecutar test unitarios durante la construccion
#------------------------------------------------------------------------------
option(ZEL_EXECUTE_TESTS "Execute unit tests" ON)
IF(ZEL_EXECUTE_TESTS)
	message("Enabling testing")
	enable_testing()
ENDIF()

#------------------------------------------------------------------------------
# determinando el sistema operativo
#------------------------------------------------------------------------------
SET(SYSTEM_NAME "NONE")

if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
	SET(SYSTEM_NAME "LINUX")
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
	SET(SYSTEM_NAME "WINDOWS")
endif()
message( STATUS "Detected system "${SYSTEM_NAME})

#------------------------------------------------------------------------------
# Que ipo de build deseamos. Si viene definido desde fuera respetamos el 
# flag. Sino, por defecto es Debug
#------------------------------------------------------------------------------
IF (NOT CMAKE_BUILD_TYPE)
	message("CMAKE_BUILD_TYPE is not defined. Setting build type to Debug")
	SET(CMAKE_BUILD_TYPE "Debug")
	add_definitions(-D_DEBUG)
ENDIF()
###############################################################################
# Se generan flags para debug
# 
###############################################################################
IF (${CMAKE_BUILD_TYPE} MATCHES "Debug")
	IF(${SYSTEM_NAME} MATCHES "LINUX")
		message("Generando flags....")
		SET(CMAKE_CXX_FLAGS "-g -O0 -Wall -Wno-unused-parameter -Wno-sign-compare -Wno-comment")
		SET(CMAKE_C_FLAGS "-g -O0 -Wall -W -Wno-unused-parameter -Wno-sign-compare -Wno-comment")
	ENDIF()
ENDIF()
###############################################################################
# Se genera instrumentacion para medir la covertura de los tests
# 
###############################################################################
IF (${CMAKE_BUILD_TYPE} MATCHES "COVERAGE")
	IF(${SYSTEM_NAME} MATCHES "LINUX")
		# COVERAGE es como debug pero adicionalmente se le pone instrumentacion
		SET(CMAKE_CXX_FLAGS "-g -O0 -Wall -Wno-unused-parameter -Wno-sign-compare -fprofile-arcs -ftest-coverage")
		SET(CMAKE_C_FLAGS "-g -O0 -Wall -W -Wno-unused-parameter -Wno-sign-compare -fprofile-arcs -ftest-coverage")
		SET(CMAKE_EXE_LINKER_FLAGS "-fprofile-arcs -ftest-coverage")
		SET(CMAKE_BUILD_TYPE "Debug")
		SET(COVERAGE_OPTION TRUE)
	ELSEIF()
		message( FATAL_ERROR "Coverage es un setting exclusivo para linux")
	ENDIF()
ENDIF()

#------------------------------------------------------------------------------
# configura variable BOOST_DIR que es donde esta instalado boost.
# Esta variable es obligatoria, y necesita ser seteada. Sino falla 
# la construccion
#------------------------------------------------------------------------------

if (DEFINED ENV{BOOST_DIR})
	#global include directories
	SET(BOOST_DIR "$ENV{BOOST_DIR}")
	include_directories(${BOOST_DIR})
else()
	SET(BOOST_DIR "/home/ferranferri/development/dev_libraries/boost_1_53_0")
	include_directories("/home/ferranferri/development/dev_libraries/boost_1_53_0")
endif()



#------------------------------------------------------------------------------
# Definir el lugar donde iran las librerias compiladas
#------------------------------------------------------------------------------
SET(THIRD_PARTY_LIB_DIR "third_party/lib")
SET(THIRD_PARTY_INC_DIR "third_party/include")

#------------------------------------------------------------------------------
# Librerias de terceros
#------------------------------------------------------------------------------
add_subdirectory(third_party)

#------------------------------------------------------------------------------
# Los modulos en los que esta dividido el proyecto.
#------------------------------------------------------------------------------
add_subdirectory(modules)

#------------------------------------------------------------------------------
# Los programas de ejemplo y proyectos prototipo 
#------------------------------------------------------------------------------
add_subdirectory(dummy_projects)

